package com.qf.boot2302.controller;

import com.qf.boot2302.service.UserService;
import com.qf.boot2302.vo.ResultVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController  // 或者@Controller 二选一
@RequestMapping("/user")   // 通用路径
@Slf4j
public class UserController {

//    @Resource
    @Autowired
    UserService userService;

    /**
     *
     3. 实现一个新的接口，处理公平点名都点过之后重置点名数据。 （可选）
     - 不可以重新启动程序去恢复数据。
     * @return
     */
    @RequestMapping("/reset")
    public ResultVo reset(){

        userService.reset();

        return ResultVo.ok(1, "重置成功",null);

    }

    /**
     * 2. 实现一个新的接口，接口路径   （可选）
     * /user/pick/fair?fair=true
     * 公平点名，每次被点过的同学，不再被点到。
     * 如果所有同学都被点过了，则返回"都点完啦"。
     * @return
     */
    @RequestMapping("/pick/fair")
    public ResultVo picknamefair(@RequestParam("fair") Boolean fair) throws Exception {
//        long start = System.currentTimeMillis();
//        log.info("开始处理请求的时间戳为:{}",start);
        log.info("入参为:fair={}",fair);
        //1. 参数校验
        if (fair == null){
            log.info("参数校验错误");
            return ResultVo.error(-1,"fair不能为空");
        }
        //2. 调用servcie处理点名逻辑
        String name = userService.picknamefair(fair);
        log.info("获取到的学生的名单为:name={}",name);
        //3. 返回数据
        long end = System.currentTimeMillis();
//        log.info("消耗的时间为:{}",(end-start));
        return ResultVo.ok(1,"成功",name);
    }

    /**
     * 1. 实现一个新的接口，接口的路径  （必选）
     * /user/pick/number?number=3
     * 返回不重复的3个同学的名字
     * @return
     */
    @RequestMapping("/pick/number")
    public ResultVo picknamewithnum(@RequestParam("number") Integer num) throws Exception {

        log.info("入参为:num={}",num);
        //1. 参数校验
        if (num<1 || num>5){
            log.info("参数校验错误");
            return ResultVo.error(-1,"参数非法,num必须在1到5之间");
        }
        //2. 调用servcie处理点名逻辑
        List<String> nameList =  userService.picknamewithnum(num);
        log.info("获取到的学生的名单为:nameList={}",nameList);
        //3. 返回数据
        return ResultVo.ok(1,"成功",nameList);
    }

    @RequestMapping("/pick")
    public ResultVo pickname() throws Exception {

        String pickname = userService.pickname();

        ResultVo resultVo = new ResultVo();
        resultVo.setCode(1);
        resultVo.setMsg("成功");
        resultVo.setData(pickname);

        return resultVo;
    }

}
